package com.lhd.mpaas.demo.activity;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewPager;
import android.view.View;

import com.alipay.mobile.antui.bar.AUTabBarItem;
import com.lhd.mpaas.demo.R;
import com.lhd.mpaas.demo.base.BaseActivity;
import com.lhd.mpaas.demo.fragment.BlankFragment;
import com.lhd.mpaas.demo.fragment.DataFragment;
import com.lhd.mpaas.demo.fragment.HomeFragment;
import com.lhd.mpaas.demo.fragment.MineFragment;
import com.lhd.mpaas.demo.fragment.WorkMomentFragment;
import com.mpaas.mas.adapter.api.MPLogger;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import butterknife.BindView;
import butterknife.OnClick;

public class MainActivity extends BaseActivity implements ViewPager.OnPageChangeListener {

    protected static final int PERMISSION_REQUEST_CODE = 0X01;
    private static final String TAG = "MainActivity";
    /**
     * 注意要选中 activity_main 后，command + N 然后点 Generate ButterKnife Injections 生成才有效
     *
     * @BindView 省去了这些步骤
     * mViewPager = (ViewPager) findViewById(R.id.viewpager);
     */
    @BindView(R.id.mainViewpager)
    ViewPager mMainViewpager;

    @BindView(R.id.tabWorkPlatform)
    AUTabBarItem tabWorkPlatform;
    @BindView(R.id.tabWorkMoment)
    AUTabBarItem tabWorkMoment;
    @BindView(R.id.tabChat)
    AUTabBarItem tabChat;
    @BindView(R.id.tabData)
    AUTabBarItem tabData;
    @BindView(R.id.tabMine)
    AUTabBarItem tabMine;

    private FragmentPagerAdapter mFragmentPagerAdapter;
    private List<Fragment> mFragmentList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_main);
//        ButterKnife.bind(this);

        // 性能埋点 > 启动速度
        MPLogger.reportLaunchTime(this);

        tabWorkPlatform.setSelected(true);

        initFragmentList();
        initFragments();

        checkPermission();

        // 设置 userId 并上报用户登录，白名单功能也将使用这里设置的 userId
        MPLogger.reportUserLogin("lhd_000001");

        // logId 描述当前埋点的关键词，控制台自定义分析中事件id对应该字段
        // logId 不能为空
        String logId = "MainActivity";

        // bizType 标识业务类型，相同 bizType 的自定义日志将遵循同样的上报策略，存储在同一个文件中，文件名为进程名_bizType
        // bizType 可以为空，默认为 userbehavor
        String bizType = "SwitchPage";

        // params 为自定义参数，控制台自定义分析中事件的自定义属性对应这些键值对
        // params 可以为空
        Map<String, String> params = new HashMap<>();
        SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr = dateformat.format(System.currentTimeMillis());
        params.put("current_time", dateStr);

        // 可调用多个重载方法
//        MPLogger.event(logId);
//        MPLogger.event(logId, bizType);
//        MPLogger.event(logId, params);
        MPLogger.event(logId, bizType, params);
    }

    @Override
    protected int getLayoutId() {
        return R.layout.activity_main;
    }

    // 页面滚动事件
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    // 页面选中事件
    @Override
    public void onPageSelected(int position) {
        switch (position) {
            case 0:
                tabSelected(tabWorkPlatform);
                break;
            case 1:
                tabSelected(tabWorkMoment);
                break;
            case 2:
                tabSelected(tabChat);
                break;
            case 3:
                tabSelected(tabData);
                break;
            case 4:
                tabSelected(tabMine);
                break;
        }
    }

    private void tabSelected(AUTabBarItem selectItem) {
        tabWorkPlatform.setSelected(false);
        tabWorkMoment.setSelected(false);
        tabChat.setSelected(false);
        tabData.setSelected(false);
        tabMine.setSelected(false);
        selectItem.setSelected(true);
    }

    // 页面滚动状态改变事件
    @Override
    public void onPageScrollStateChanged(int state) {

    }

    // 页面点击事件
    @OnClick({R.id.tabWorkPlatform, R.id.tabWorkMoment, R.id.tabChat, R.id.tabData, R.id.tabMine})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.tabWorkPlatform:
                // 设置 position 对应的集合中的 Fragment
                mMainViewpager.setCurrentItem(0, false);
                tabSelected(tabWorkPlatform);
                break;
            case R.id.tabWorkMoment:
                mMainViewpager.setCurrentItem(1, false);
                break;
            case R.id.tabChat:
                mMainViewpager.setCurrentItem(2, false);
                break;
            case R.id.tabData:
                mMainViewpager.setCurrentItem(3, false);
                break;
            case R.id.tabMine:
                mMainViewpager.setCurrentItem(4, false);
                break;
        }
    }

    // 将 Fragment 按顺序加入集合中
    private void initFragmentList() {
        for (int i = 0; i < 5; i++) {
            if (0 == i) {
                mFragmentList.add(new HomeFragment());
                continue;
            }
            if (1 == i) {
                mFragmentList.add(new WorkMomentFragment());
                continue;
            }
            if (3 == i) {
                mFragmentList.add(new DataFragment());
                continue;
            }
            if (4 == i) {
                mFragmentList.add(new MineFragment());
                continue;
            }
            mFragmentList.add(BlankFragment.newInstance(i + "", "空白页"));
        }
    }

    private void initFragments() {
        // 初始化适配器
        FragmentPagerAdapter fragmentPagerAdapter = new FragmentPagerAdapter(this.getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int position) {
                // 从集合中获取对应位置的 Fragment
                return mFragmentList.get(position);
            }

            @Override
            public int getCount() {
                // 获取集合中 Fragment 的总数
                return mFragmentList.size();
            }
        };
        // 设置ViewPager的适配器
        mMainViewpager.setAdapter(fragmentPagerAdapter);

        //设置ViewPager的切换监听
        mMainViewpager.setOnPageChangeListener(this);
        mMainViewpager.setOffscreenPageLimit(5);
        // 选择首先展示的页面, 并加载页面值
        mMainViewpager.setCurrentItem(0);

    }

//    @Override
//    public void onFragmentInteraction(Uri uri) {
//        // Fragment与Activity,Fragment与Fragment之间的信息传递，如果两个Fragment想要交互, 必需通过他们之间关联的Activity实现. 两个Fragment之间的直接的信息传递是行不通的.
//        // 为了实现Fragment和与之关联的Activity之间的信息传递, 我们可以在Fragment中定义一个接口, 然后在Activity中实现这个接口. 这个Fragment会在onAttach()方法中捕捉到Activity中实现的这个接口, 然后通过调用接口中的方法实现与Activity的交流.
//        // 原文链接：https://blog.csdn.net/ququ9376/article/details/46524819
//    }

    protected void checkPermission() {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED
                || ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    PERMISSION_REQUEST_CODE);
        }
    }
}
